인사연동 수행
1. 개요
본 문서에서는 JDDC드라이버를 사용하여 이기종간의 데이터를 가지고 올수 있도록 개발한 소프트캠프의 DBSync를 이용하여
고객사의 인사 정보를 TempTable로 가지고 온 후 SPDTSAgent를 사용하여 문서보안의 각 테이블로 가공되는 방법을 설명합니다.
참고적으로 문서보안 서버 및 고객의 인사 DB가 MSSQL인 경우 연결된 서버를 이용할 수 있습니다.
DBSync의 구조 및 파일의 역할을 이해하여 TempTable로 인사연동를 가지고 온 것으로 검증 한 후 SPDTSAgent를 수행할 수 있도록 합니다.
2. 이용 방법에 따른 인산연동 수행
- DBSync
- MSSQL
2.1 DBSync 파일을 서버에 업로드
- DBSync의 파일들의 사용방법 설명 합니다. 각 탭을 클릭하여 파일의 역할에 대해 숙지 합니다.
- 인사데이터접속정보
- 문서보안DB접속정보
- 데이터매핑
- 가지고오기
디렉토리 및 파일명 : 설치위치\DBSync\conf의 "SqlMapConfigIN.properties" 파일
인사 데이터를 가지고올 DB 정보(SELECT가 수행되는 DB정보)입니다.
인사데이터가 있는 DBMS 종류의 driver, url값으로 복사하여 사용합니다.
URL 및 계정 정보를 고객사에서 제공된 정보로 기록합니다.
driver는
mssql 일 경우 driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
oracle 일 경우 driver=oracle.jdbc.OracleDriver
mariadb 일 경우 driver=org.mariadb.jdbc.Driver
mysql 일 경우 driver=com.mysql.jdbc.Driver
url 은
mssql 일 경우 url=jdbc\:sqlserver\://10.10.10.48\:1433;databaseName\=TFTDB;
oracle 일 경우 url=jdbc\:oracle\:thin\:@10.50.10.18\:1521\:xe
mariadb 일 경우 url=jdbc\:mariadb\://10.10.10.10\:3306/tftdb
mysql일 경우 url=jdbc\:mysql\://10.10.10.45\:3306/tftdb
mssql사용시 예시
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc\:sqlserver\://10.10.10.48\:1433;databaseName\=TFTDB;
username=dsecadmin
password=dsecadmin123!@#
디렉토리 및 파일명 : 설치위치\DBSync\conf의 "SqlMapConfigOUT.properties" 파일
인사 데이터를 집어넣을 DB 정보(TRUNCATE와 INSERT가 수행되는 DB정보)입니다.
문서보안 DBMS 종류의 driver, url값으로 복사하여 사용합니다.
URL 및 계정 정보는 생성 또는 제공된 정보로 기록합니다.
driver는
mssql 일 경우 driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
oracle 일 경우 driver=oracle.jdbc.OracleDriver
mariadb 일 경우 driver=org.mariadb.jdbc.Driver
mysql 일 경우 driver=com.mysql.jdbc.Driver
url 은
mssql 일 경우 url=jdbc\:sqlserver\://10.10.10.48\:1433;databaseName\=TFTDB;
oracle 일 경우 url=jdbc\:oracle\:thin\:@10.50.10.18\:1521\:xe
mariadb 일 경우 url=jdbc\:mariadb\://10.10.10.10\:3306/tftdb
mysql일 경우 url=jdbc\:mysql\://10.10.10.45\:3306/tftdb
mariadb사용 예시
driver=org.mariadb.jdbc.Driver
url=jdbc\:mariadb\://10.10.10.10\:3306/tftdb
username=drmadmin
password=drmadmin1!
디렉토리 및 파일명 : 설치위치\DBSync\sqlmap의 "query_out.xml" 파일
TFTDB의 각 TEMP테이블에 TRUNCATE와 INSERT가 수행되는 정보입니다.
SELECT
-> TRUNCATE
-> INSERT
의 순으로 세개의 ID가 한사이클로 동작합니다.
1번으로 실행시 SELECT
= SelectTable1, TRUNCATE
= truncateTable1, INSERT
= InsertTable1 수행
2번으로 실행시 SELECT
= SelectTable2, TRUNCATE
= truncateTable2, INSERT
= InsertTable2 수행
...
N번으로 실행시 ID는 SELECT
= SelectTableN, TRUNCATE
= truncateTableN, INSERT
= InsertTableN 수행
SELECT
에서 사용한 컬럼명은 INSERT
시의 변수명이 됩니다.
즉, INSERT
에서 VALUES
에 사용될 값은 #SELECT의 컬럼명샵#으로 변수명을 사용합니다.
SELECT문에서의 조회 컬럼명이
SELECT 조회컬럼명1, 조회컬럼명2 FROM SELECTTABLE
INSERT시 #과#사이에 변수명으로 들어감
INSERT INTO TEMPTABLE (삽입컬럼명1, 삽입컬럼명2)
VALUES (#조회컬럼명1#, #조회컬럼명2#)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="query_out">
<select id="SelectTable1" resultClass="java.util.HashMap">
<![CDATA[ SELECT ID, ID_NAME, GROUP_NUM FROM insatable where ID is not null ]]>
</select>
<delete id="truncateTable1" parameterClass="String">
<![CDATA[ TRUNCATE TABLE tempuser_info ]]>
</delete>
<insert id="InsertTable1" parameterClass="java.util.HashMap">
INSERT INTO TempUser_Info (USER_ID, USER_NAME, GROUP_ID)
VALUES (#ID#, #ID_NAME#, #GROUP_NUM#)
</insert>
<select id="SelectTable2" resultClass="java.util.HashMap">
<![CDATA[ SELECT distinct GROUP_NUM, GROUP_NAME, GROUP_OVER FROM insatable ]]>
</select>
<delete id="truncateTable2" parameterClass="String">
<![CDATA[ TRUNCATE TABLE tempGroup_info ]]>
</delete>
<insert id="InsertTable2" parameterClass="java.util.HashMap">
INSERT INTO tempGroup_info (GROUP_ID, GROUP_NAME, ParentGroup_ID)
VALUES (#GROUP_NUM#, #GROUP_NAME#, #GROUP_OVER#)
</insert>
<procedure id="procecedure1"> { call PROCEDURE_NAME () }
</procedure>
</sqlMap>
-
셋팅이 완료되면 DBSync.jar을 구동한다.
-
DBSync.jar의 동작 : in정보로 접속 접속하여 SELECT를 하고 메모리에 저장 - > out정보로 접속하여 TRUNCATE -> 메모리의 변수들을 하나씩 가지고와서 out정보로 접속하여 INSERT를 수행한다.
-
동작 명령어 :
java -jar DBSync.jar 사이클번호
사이클번호 없이 모든 사이클을 돌리려면ALL
을 입력 한다.
- DBMS사용
- LDAP사용
2.2. 고객사 인사DB 정보 작성(DBSync INPUT 정보)
- SqlMapConfigIN.properties 설정파일을 오픈(또는 생성)하여 고객사의 인사DB 정보를 작성
SqlMapConfigIN.properties
파일명은 대소문자 구분합니다.
vi /DBSync/conf/SqlMapConfigIN.properties
driver = 고객사인사DB의 종류에맞는 설정 기입
url = 고객사 인사DB의 IP:Port/database
username = 고객사 인사 DB의 접속 ID
password = 고객사 인사 DB의 접속 PW
2.2. 고객사 LDAP(AD) 정보 작성(DBSync INPUT(LDAP) 정보)
- ldap.properties 설정파일을 오픈하여 고객사의 AD 정보를 작성
vi /DBSync/conf/ldap.properties
ldap.url=LDAP://10.10.10.5:389
ldap.baseDN=OU=기술지원부,OU=기술본부,DC=softcamp,DC=co,DC=kr
ldap.adminID=adadmin
ldap.adminPW=adadmin1!
ldap.attr.0=sid
ldap.attr.1=sAMAccountName
...
ldap.attr.N=memberOf
ldap.url=LDAP://IP:PORT
ldap.baseDN=OU=,DC=를 기록
ldap.adminID=LDAP(AD)에서 정보 조회가 가능 ID
ldap.adminPW=LDAP(AD)에서 정보 조회가 가능 ID의 PW
ldap.attr.0=Ldap연동시 AD(Active Directory)의 첫번째 속성값(attribute)
ldap.attr.1=Ldap연동시 AD(Active Directory)의 두번째 속성값(attribute)
...
ldap.attr.N=Ldap연동시 AD(Active Directory)의 N번째 속성값(attribute)
TEMP Table에 넣을 수 있는 최대한의 속성값을 모두 기록합니다.
AD Explorer 다운 : https://learn.microsoft.com/ko-kr/sysinternals/downloads/adexplorer
2.3. 문서보안 DB 정보 작성(DBSync OUTPUT 정보)
- SqlMapConfigOUT.properties 설정파일을 오픈하여 문서보안DB 정보를 작성
SqlMapConfigOUT.properties
파일명은 대소문자 구분합니다.
vi /DBSync/conf/SqlMapConfigOUT.properties
driver = 문서보안 DB의 종류에맞는 설정 기입
url = 문서보안 DB의 IP:Port/database
username = 문서보안 DB의 접속 ID
password = 문서보안 DB의 접속 PW
2.4. 각 TEMPTable_Info에 채울 컬럼 매핑
- DBMS사용
- LDAP사용
- 인사연동간 고객사 DB의 컬럼값을 문서보안 DB의 컬럼으로 가공하는 작업
select, insert문을 환경에 맞게 수정하여 사용 - 아래의 쿼리문은 예시로 유저 정보와 그룹정보를 가져오는 쿼리입니다. 직위정보와 겸직정보가 연동이 필요하다면 [select, truncate, insert 형식을 복사하여 뒤의 숫자를 3,4 로 변경하여 작성 필요]
vi /DBSync/sqlmap/query_out.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="query_out">
<select id="SelectTable1" resultClass="java.util.HashMap">
<![CDATA[ SELECT ID, ID_NAME, GROUP_NUM FROM insatable where ID is not null ]]>
</select>
<delete id="truncateTable1" parameterClass="String">
<![CDATA[ TRUNCATE TABLE tempuser_info ]]>
</delete>
<insert id="InsertTable1" parameterClass="java.util.HashMap">
INSERT INTO TempUser_Info (USER_ID, USER_NAME, GROUP_ID)
VALUES (#ID#, #ID_NAME#, #GROUP_NUM#)
</insert>
<select id="SelectTable2" resultClass="java.util.HashMap">
<![CDATA[ SELECT distinct GROUP_NUM, GROUP_NAME, GROUP_OVER FROM insatable ]]>
</select>
<delete id="truncateTable2" parameterClass="String">
<![CDATA[ TRUNCATE TABLE tempGroup_info ]]>
</delete>
<insert id="InsertTable2" parameterClass="java.util.HashMap">
INSERT INTO tempGroup_info (GROUP_ID, GROUP_NAME, ParentGroup_ID)
VALUES (#GROUP_NUM#, #GROUP_NAME#, #GROUP_OVER#)
</insert>
<procedure id="procecedure1"> { call PROCEDURE_NAME () }
</procedure>
</sqlMap>
- id=SelectTabel은 의미없는 SELECT구문을 넣어도 무관합니다.
- id=InsertTable의 VALUES의 변수명은 ldap.properties에서 사용한 ldap.attr.X 의 값입니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="query_out">
<select id="SelectTable1" resultClass="java.util.HashMap">
<![CDATA[
SELECT GROUP_NAME ,DELETEGROUP_FLAG ,NODE_TYPE
,GROUP_PATH ,GROUP_ORDER ,RSAPUBLIC_KEY
,GROUPENCRYPT_KEY ,CLASS_ID ,DELETEEXPIRE_DATE
,GROUP_ID ,RSAPRIVATE_KEY
FROM group_info
]]>
</select>
<delete id="truncateTable1" parameterClass="String" >
<![CDATA[
truncate table tempuser_info
]]>
</delete>
<insert id="InsertTable1" parameterClass="java.util.HashMap">
INSERT INTO tempuser_info (User_ID , USER_NAME )
VALUES (#sid# , #sAMAccountName#)
</insert>
<procedure id="procecedure1" >
{ call PROCEDURE_NAME () }
</procedure>
</sqlMap>
2.5. DBSync 실행
- DBSync 를 동작하여 고객사 DB > 문서보안 TEMP DB로 데이터를 가져오는 작업
실행파일이 있는 경로로 들어가서 실행
cd /DBSync/
java -jar DBSync.jar 1 // 뒤의 숫자 기입시 select 1 delete 1 insert1 실행
java -jar DBSync.jar 2 // 뒤의 숫자 기입시 select 2 delete 2 insert2 실행
query_out.xml 에서 3번 4번 항목도 추가하였다면 아래처럼 추가적으로 실행 필요
java -jar DBSync.jar 3
java -jar DBSync.jar 4
2. 인사연동 정보
<MS-SQL 정보(고객사)>
IP : 10.10.202.21
ID : admin
PW : softcamp1!
<MS-SQL 정보(문서보안)>
IP : 10.81.10.70
ID : drmadmin
PW : softcamp!
3. 데이터베이스 연결
가. 고객사 데이터베이스 연결
- 개체 탐색기 실행
[서버 개체] -> [연결된 서버] -> [새 연결된 서버]
- 새 연결된 서버
-
연결된 서버 : TEST
-
제품 이름 : MS-SQL
-
데이터 원본 : 10.10.202.21 (고객사 인사정보 데이터베이스 IP)
입력 후
확인
좌측 탭의 [보안] -> [다음 보안 컨텍스트를 사용하여 연결] 선택
- 원격 로그인 : admin
- 암호 : socam2019!
- 고객사 인사정보 데이터베이스가 연결된 모습
4.2. 원본인사정보 > TEMP 프로시저 작성
- 좌측 탭의 [데이터 베이스] -> [TFTDB] -> [프로그래밍 기능] -> [저장 프로시저] -> [dbo.INSA_AFTER_INPROCESS]을 수정
- 고객사 > 문서보안 데이터 이동 쿼리 작성
USE [TFTDB]
GO
SET ANSI_NULLS OFF // OFF -> ON 으로 변경
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [db].[INSA_AFTER_INPROCESS]
AS
BEGIN
......
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
TRUNCATE Table dbo.TempUser_Info; //문서보안 TEMP 경로 초기화
TRUNCATE Table dbo.TempDuty_Info; //문서보안 TEMP 경로 초기화
TRUNCATE Table dbo.TempGroup_Info; //문서보안 TEMP 경로 초기화
insert into tftdb.dbo.tempuser_info (u.user_id, u.user_name, u.duty_id, u.user_pw, g.group_id) //문서보안TEMP경로 데이터삽입
select u.user_id, u.user_name, u.duty_id, u.user_pw, g.group_id //고객사 인사정보 선택
from [TEST].[TFTDB].[dbo].[User_Info] as u //인사정보 주소
join [TEST].[TFTDB].[dbo].[usergroup_Info] as g
on u.user_id = g.user_id and OtherJob_Flag ='0'; //otherjob_flag=0 > 겸직으로 인한 아이디 중복 오류 해결
insert into tftdb.dbo.TempGroup_Info (g.group_id, g.group_name, pg.parentgroup_id) //문서보안 TEMP 경로 데이터 삽입
select g.group_id, g.group_name, pg.parentgroup_id //고객사 인사정보 선택
from [TEST].[TFTDB].[dbo].[Group_Info] as g //인사정보 주소
join [TEST].[TFTDB].[dbo].[parentGroup_Info] as pg
on g.Group_ID = pg.Group_ID;
insert into tftdb.dbo.TempDuty_Info (duty_id, duty_name) //문서보안 TEMP 경로 데이터 삽입
select duty_id, duty_name //고객사 인사정보 선택
from [TEST].[TFTDB].[dbo].[Duty_Info]; //인사정보 주소
END
- 쿼리 실행
'명령이 완료되었습니다.' 메시지 창 확인
- DBSync
- MSSQL
6. 인사연동 설정파일 수정
가. SCI 웹페이지 접속
- 브라우저 주소창에서 접속(SCISM 서비스 실행되어있어야함 Default포트 8080)
http://문서보안서버IP:8080
나. 상단의 인사연동설정 클릭
- 인사 DB 설정 탭의 우측창 수정 후 적용 & 접속테스트 클릭
Before
#
#Tue Dec 26 15:35:08 KST 2023
databasename=TFTDB
password=softcamp
url=jdbc\:sqlserver\://127.0.0.1\:1433;databaseName\=TFTDB;
dbms=MSSQL
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
username=drmadmin
After
#
#Tue Dec 26 15:35:08 KST 2023
in.databasename=TFTDB
in.password=softcamp
in.url=jdbc\:sqlserver\://127.0.0.1\:1433;databaseName\=TFTDB;
in.dbms=MSSQL
in.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
in.username=drmadmin
#
#Tue Dec 26 15:35:08 KST 2023
out.databasename=TFTDB
out.password=softcamp
out.url=jdbc\:sqlserver\://127.0.0.1\:1433;databaseName\=TFTDB;
out.dbms=MSSQL
out.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
out.username=drmadmin
7. SPDTSAgent
- SPDTSAgent 를 동작하여 문서보안 TEMP DB > 문서보안 인사 DB 로 동기화 하는 작업
인사연동 프로시저가 있는 경로로 들어가서 실행(SCI 서버 설치 경로 하위경로의 SPDTSAgent 폴더안에 존재)
cd Softcamp/SCI_Server/SPDTSAgent/
./SPDTSAgent
8. 인사연동 완료
- 인사연동 여부는 관리자콘솔에 접속하여 확인가능
4.3. 인사연동 동작
1. SCI 웹페이지 접속
인사연동 설정
-> [인사 DB 설정] : 설정 값 확인 후 적용
- DBMS : MSSQL (문서보안 데이터베이스 종류)
- URL : 10.81.10.70:1433 (문서보안 데이터베이스 IP: 포트)
- 사용자명 : drmadmin (문서보안 데이터베이스 계정 아이디)
- 패스워드 : softcamp1! (문서보안 데이터베이스 계정 패스워드)
- 데이터베이스명 : tftdb
2. 인사연동 실행
-
CMD를 관리자 권한으로 실행
-
SPDTSAgent.exe 실행.
cd C:/Program Files/Softcamp/SCI_Server/SPDTSAgent #실행파일이 있는 경로 이동
SPDTSAgent.exe #파일 실행
5. 인사연동 완료
5.1. 데이터베이스에서 확인
USE TFTDB
GO
Select * from user_info;